package com.kk.init;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

/**
 * 1.这是整个spring容器在刷新之前初始化ConfigurableApplicationContext的回调接口.
 * 简单来说，就是在容器刷新之前调用此类的initialize方法。
 * 这个点允许被用户自己扩展。用户可以在整个spring容器还没被初始化之前做一些事情。
 * <p>
 * ps: 因为这时候spring容器还没被初始化，所以想要自己的扩展的生效，有以下三种方式：
 * <p>
 * 1).在启动类中用 springApplication.addInitializers(new TestApplicationContextInitializer())语句加入
 * <p>
 * 2)配置文件配置 context.initializer.classes=com.kk.init.TestApplicationContextInitializer
 * <p>
 * 3)Spring SPI扩展，在 META-INF/spring.factories中加入
 * org.springframework.context.ApplicationContextInitializer=com.kk.init.TestApplicationContextInitializer
 * <p>
 * .
 *
 * @author little_lunatic
 * @date 2023-08-04
 */
@Slf4j
public class TestApplicationContextInitializer implements ApplicationContextInitializer {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        log.info("1.spring容器初始化之前的操作---应用程序上下文初始化");
    }
}
